package com.eddie.libray.service;

import com.eddie.libray.LibraryDataSource;
import com.eddie.libray.entity.BookEntity;
import com.eddie.libray.entity.UserEntity;
import com.eddie.libray.utils.DataSourceUtils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 用户业务处理
 *
 * @author Eddie
 * @since 2022/09/02 12:02
 **/
public class UserService {

    /**
     * 获取图书馆系统维护的用户信息中，键值为当前登录用户的用户名的用户详细信息，便于操作当前用户的数据
     */
    private final UserEntity user;

    private final List<BookEntity> books = LibraryDataSource.books;

    private final Scanner scanner = new Scanner(System.in);

    public UserService(UserEntity user) {
        this.user = user;
    }

    /**
     * 查看用户自己借到的图书
     */
    public void list() {
        System.out.println("编号\t书名\t\t价格\t\t作者\t\t出版时间\t\t状态");

        //用户的所有书籍id列表
        List<Integer> ownBookIds = user.getOwnBookIds();

        //使用增强for遍历每一项id
        for (Integer ownBookId : ownBookIds) {
            //使用自定义数据源工具类获取每一个id对应的书籍index
            int index = DataSourceUtils.getBookIndexById(ownBookId);
            //从维护的图书数据源中获取每一项图书的信息,打印信息
            BookEntity item = books.get(index);
            //增强for的lambda表达式（java8新增语法）进行遍历
            System.out.println(item.getId() + "\t"
                    + item.getName() + "\t"
                    + item.getPrice() + "\t"
                    + item.getAuthor() + "\t"
                    //使用simpleDateFormat来格式化出版日期
                    + new SimpleDateFormat("yyyy-MM-dd").format(item.getCreateTime()) + "\t"
                    //这里使用三元运算符来判断状态，对前台进行回显
                    + (item.getStatus() == 0 ? "未借出" : "已借出"));
        }
    }

    /**
     * 借书
     */
    public void borrowBook() {
        //先打印所有书籍
        DataSourceUtils.list();
        System.out.println("请选择要借的书的编号：");
        int id = scanner.nextInt();
        //根据编号查找书籍在数据源中的下标
        int index = DataSourceUtils.getBookIndexById(id);
        if (index == -1) {
            System.out.println("没有找到编号为：" + id + "的书籍");
            return;
        }
        BookEntity bookEntity = books.get(index);
        if (bookEntity.getStatus() == 1) {
            System.out.println("编号为：" + id + "的书籍已被借出");
            return;
        }
        //如果上述判断都通过了，则借出该书籍
        bookEntity.setStatus(1);
        user.getOwnBookIds().add(id);
        System.out.println("成功借到编号为：" + id + "的书籍");
    }

    /**
     * 还书
     */
    public void returnBook() {
        //调用该方法查看自己借阅的书
        list();
        System.out.println("请输入要还的书籍编号：");
        int id = scanner.nextInt();
        List<Integer> ownBookIds = user.getOwnBookIds();
        //定义标识，表示自己借阅的书籍中是否存在该书
        boolean flag = false;
        //定义自己的书籍的下标，便于清除自己的借书记录
        int ownBookIndex = 0;
        for (Integer ownBookId : ownBookIds) {
            if (ownBookId == id) {
                flag = true;
                break;
            }
            ownBookIndex++;
        }
        if (!flag) {
            System.out.println("您所借阅的书籍中没有编号为：" + id + "的书籍，归还失败");
            return;
        }

        //归还书籍
        int index = DataSourceUtils.getBookIndexById(id);
        BookEntity bookEntity = books.get(index);
        bookEntity.setStatus(0);
        books.set(index, bookEntity);
        user.getOwnBookIds().remove(ownBookIndex);
        System.out.println("编号为：" + id + "的书籍归还成功");
    }

}
